连接到目标服务器。调用此方法会发起异步的connect
系统调用,并挂起当前协程,底层会监听可写,当连接完成或失败后,恢复该协程。
该方法适用于Client
端,支持IPv4
、IPv6
、UnixSocket
。
function Coroutine\Socket->connect(string $host, int port = 0, double $timeout = -1) : bool;
$host
:目标服务器的地址,如127.0.0.1
、192.168.1.100
、/tmp/php-fpm.sock
、www.baidu.com
等,可以传入IP
地址、Unix Socket
路径或域名。若为域名,底层会自动进行异步的DNS
解析,不会引起阻塞$port
:目标服务器端口,Socket
的domain
为AF_INET
、AF_INET6
时必须设置端口$timeout
:超时时间,底层会设置定时器,在规定的时间内未能建立连接,connect
将返回false
- 超时或
connect
系统调用报错时返回false
,可使用errCode
属性获取错误码,其中超时错误码为ETIMEDOUT
- 成功返回
true
$socket = new Co\Socket(AF_INET, SOCK_STREAM, 0);
go(function () use ($socket) {
$retval = $socket->connect('localhost', 9601);
while ($retval)
{
$n = $socket->send("hello");
var_dump($n);
$data = $socket->recv();
var_dump($data);
if (empty($data)) {
$socket->close();
break;
}
co::sleep(1.0);
}
var_dump($retval, $socket->errCode);
});